﻿using System.Collections;
using System.Collections.Generic;

namespace Neturion.Dados
{
    /// <summary>
    /// 
    /// </summary>
    public class Produto
    {
        private int _produtoId;
        private string _codigo;
        private string _codigoBarras;
        private string _referencia;
        private string _descricao;
        private string _complemento;
        private string _descricaoAbreviada;
        private string _codigoMarca;
        private string _localizacao;
        private decimal _pesoBruto;
        private decimal _pesoLiquido;
        private decimal _volume;
        private bool _flagServico;
        private string _indicadorArredondamentoTruncamento;
        private string _indicadorProducaoPropriaTerceiro;
        private string _ncm;
        private decimal _aliquotaIpi;

        private string _codigoGenero;
        private string _codigoTipo;
        private string _codigoTipoServico;
        private string _codigoCor;
        private string _codigoTamanho;
        private IList _listaFornecedores;
        private IList _listaProdutoPrecos;
        private IList _listaProdutoEstoques;
        private IList _listaProdutoAliquotas;

        public Produto()
        {
            _listaFornecedores = new List<Fornecedor>();
            _listaProdutoEstoques = new List<ProdutoEstoque>();
            _listaProdutoPrecos = new List<ProdutoPreco>();
            _listaProdutoAliquotas = new List<ProdutoAliquota>();
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual int ProdutoId
        {
            get { return _produtoId; }
            set { _produtoId = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Codigo
        {
            get { return _codigo; }
            set { _codigo = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoBarras
        {
            get { return _codigoBarras; }
            set { _codigoBarras = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Referencia
        {
            get { return _referencia; }
            set { _referencia = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Descricao
        {
            get { return _descricao; }
            set { _descricao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Complemento
        {
            get { return _complemento; }
            set { _complemento = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string DescricaoAbreviada
        {
            get { return _descricaoAbreviada; }
            set { _descricaoAbreviada = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoMarca
        {
            get { return _codigoMarca; }
            set { _codigoMarca = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Localizacao
        {
            get { return _localizacao; }
            set { _localizacao = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual decimal PesoBruto
        {
            get { return _pesoBruto; }
            set { _pesoBruto = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual decimal PesoLiquido
        {
            get { return _pesoLiquido; }
            set { _pesoLiquido = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual decimal Volume
        {
            get { return _volume; }
            set { _volume = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual bool FlagServico
        {
            get { return _flagServico; }
            set { _flagServico = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string IndicadorArredondamentoTruncamento
        {
            get { return _indicadorArredondamentoTruncamento; }
            set { _indicadorArredondamentoTruncamento = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string IndicadorProducaoPropriaTerceiro
        {
            get { return _indicadorProducaoPropriaTerceiro; }
            set { _indicadorProducaoPropriaTerceiro = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string Ncm
        {
            get { return _ncm; }
            set { _ncm = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual decimal AliquotaIpi
        {
            get { return _aliquotaIpi; }
            set { _aliquotaIpi = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoGenero
        {
            get { return _codigoGenero; }
            set { _codigoGenero = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoTipo
        {
            get { return _codigoTipo; }
            set { _codigoTipo = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoTipoServico
        {
            get { return _codigoTipoServico; }
            set { _codigoTipoServico = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoCor
        {
            get { return _codigoCor; }
            set { _codigoCor = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual string CodigoTamanho
        {
            get { return _codigoTamanho; }
            set { _codigoTamanho = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaFornecedores
        {
            get { return _listaFornecedores; }
            set { _listaFornecedores = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaProdutoPrecos
        {
            get { return _listaProdutoPrecos; }
            set { _listaProdutoPrecos = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaProdutoEstoques
        {
            get { return _listaProdutoEstoques; }
            set { _listaProdutoEstoques = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        public virtual IList ListaProdutoAliquotas
        {
            get { return _listaProdutoAliquotas; }
            set { _listaProdutoAliquotas = value; }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fornecedor"></param>
        public virtual void AdicionarFornecedor(Fornecedor fornecedor)
        {
            ListaFornecedores.Add(fornecedor);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="fornecedor"></param>
        public virtual void RemoverFornecedor(Fornecedor fornecedor)
        {
            ListaFornecedores.Remove(fornecedor);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produtoPreco"></param>
        public virtual void AdicionarProdutoPreco(ProdutoPreco produtoPreco)
        {
            produtoPreco.Produto = this;
            ListaProdutoPrecos.Add(produtoPreco);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produtoPreco"></param>
        public virtual void RemoverProdutoPreco(ProdutoPreco produtoPreco)
        {
            ListaProdutoPrecos.Remove(produtoPreco);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produtoEstoque"></param>
        public virtual void AdicionarProdutoPreco(ProdutoEstoque produtoEstoque)
        {
            produtoEstoque.Produto = this;
            ListaProdutoEstoques.Add(produtoEstoque);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produtoEstoque"></param>
        public virtual void RemoverProdutoEstoque(ProdutoEstoque produtoEstoque)
        {
            ListaProdutoEstoques.Remove(produtoEstoque);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produtoAliquota"></param>
        public virtual void AdicionarProdutoAliquota(ProdutoAliquota produtoAliquota)
        {
            produtoAliquota.Produto = this;
            ListaProdutoAliquotas.Add(produtoAliquota);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="produtoPreco"></param>
        public virtual void RemoverProdutoAliquota(ProdutoPreco produtoPreco)
        {
            ListaProdutoAliquotas.Remove(produtoPreco);
        }
    }
}